package com.eagle.spring.reactive.loader;

import java.util.concurrent.CompletableFuture;

/**
 * 只有一个线程ForkJoinPool串行执行
 * 同DataLoader区别在于DataLoader是main线程在执行
 *
 * 执行流程
 * main -> submit -> ...
 * 		sub-thread(fork): t1->t2->t3
 *
 * 所有流程都是子线程中执行，因此是非阻塞的
 * 又因为是在子线程中执行的，因此也是异步的
 */
public class ChainDataLoader extends DataLoader {
	protected void doLoad() {
		CompletableFuture
				.runAsync(super::loadConfigurations)
				.thenRun(super::loadUsers)
				.thenRun(super::loadOrders)
				.whenComplete((result, throwable) -> {
					// 完成时回调
					System.out.println("[线程 : "+Thread.currentThread().getName()+"] 加载完成");
				})
				.join(); // 等待完成
	}

	public static void main(String[] args) {
		new ChainDataLoader().load();
	}
}
